package org.example.service.impl;

import org.example.pojo.entity.SysRegion;
import org.example.mapper.SysRegionMapper;
import org.example.service.DownloadService;
import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

@Service
public class DownloadServiceImpl implements DownloadService {
    private final SysRegionMapper sysRegionMapper;

    public DownloadServiceImpl(SysRegionMapper sysRegionMapper) {
        this.sysRegionMapper = sysRegionMapper;
    }

    @Override
    public void findName() {
        List<SysRegion> sysRegions = sysRegionMapper.selectByLevel((short) 3);
        for (SysRegion sysRegion : sysRegions) {
            this.Download(sysRegion.getCode());
        }
    }

    @Override
    public void Download(String name) {
        try { // 开始一个异常处理块
            String url = "https://geo.datav.aliyun.com/areas_v3/bound/"; // 定义要访问的URL
            url = url + name.substring(0, 6) + ".json"; // 将name的前六个字符添加到URL中，并添加".json"后缀
            URL obj = new URL(url); // 创建一个URL对象
            HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // 打开一个到URL的连接
            con.setRequestMethod("GET"); // 设置请求方法为GET

            int responseCode = con.getResponseCode(); // 获取响应码
            System.out.println("Response Code : " + responseCode); // 打印响应码

            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); // 创建一个BufferedReader对象来读取输入流
            String inputLine; // 定义一个字符串变量来存储每一行输入
            StringBuffer response = new StringBuffer(); // 创建一个StringBuffer对象来存储整个响应内容

            while ((inputLine = in.readLine()) != null) { // 当输入流中有内容时，循环执行以下操作
                response.append(inputLine); // 将当前行的内容添加到response中
            }
            in.close(); // 关闭输入流

            FileWriter file = new FileWriter(name + ".json"); // 创建一个FileWriter对象，用于将数据写入文件
            file.write(response.toString()); // 将response的内容写入文件
            file.close(); // 关闭文件

        } catch (Exception e) { // 如果发生异常，执行以下操作
            e.printStackTrace(); // 打印异常堆栈信息
        }
    }
}